/**
 * 部门-多选.
 *
 * @Creator      : liujiedong
 * @Create Date  : 2018-4-2
 * @Since        : 06.00.0000
 * Modifier      :
 * Modified Date :
 * @Dependences  : appcan.js, jquery.js, vue.js, supp*.js
 * @Description  :
 */

// ~ Fields
// ====================================================================================================================
var vueObj;
var deptList;

// ~ Initialize
// ====================================================================================================================
appcan.ready(function() {
    initVue();
    initPage();

});

// ~ Public Functions
// ====================================================================================================================

// ~ Private Functions
// ====================================================================================================================

//初始化vue
function initVue() {
    vueObj = new Vue({
        el : "#multiple",
        data : {
            deptList : [],
            //是否是根目录
            showCrumbs : false,
            crumbsList : [//面包屑目录
            ],
            deptSelected : [],
            confirmBtnDisabled : true
        },
        methods : {
            selectedRow : function(item, id) {
                if (item.checked) {
                    vueObj.removeDept(id);
                } else {
                    item.checked = true;
                    if (objinArrar(item, vueObj.deptSelected) < 0) {
                        vueObj.deptSelected.push(item);
                    }
                }

                vueObj.changeConfirmBtn();

                setTimeout(function() {
                    slideCheckedDiv();
                }, 100);

            },
            removeDept : function(id) {
                for (var i = 0; i < vueObj.deptSelected.length; i++) {
                    if (id == vueObj.deptSelected[i].id) {
                        vueObj.deptSelected[i].checked = false;
                        vueObj.deptSelected.splice(i, 1);
                    }
                }
                vueObj.changeConfirmBtn();

                setTimeout(function() {
                    slideCheckedDiv();
                }, 100);
            },
            //显示下级部门
            showLowerBtn : function(model) {
                vueObj.crumbsList.push({
                    "name" : model.name,
                    "id" : model.id
                });
                //根据该部门id查询是否存在下级部门
                vueObj.deptList = model.son;
                
                //遍历所有下级部门，查询是否存在子部门
                for (var i = 0; i < model.son.length; i++) {
                    var node = model.son[i];

                    var sonList = jq.map(deptList, function(item) {
                        if (item.pId == node.id) {
                            setItemChecked(item);
                            return item;
                        }
                    });
                    node["son"] = sonList;
                };

                vueObj.showCrumbs = true;
            },
            returnsuper : function(index, id) {
                if (index == vueObj.crumbsList.length - 1) {
                    return false;
                }
                //该索引之后的所有数据移除
                var removeLen = vueObj.crumbsList.length - 1 - index;
                vueObj.crumbsList.splice(index + 1, removeLen);
                //根据id查询它的所有下级
                var sonList = jq.map(deptList, function(item) {
                    if (item.pId == id) {
                        setItemChecked(item);
                        return item;
                    }
                });
                for (var i = 0; i < sonList.length; i++) {
                    var node = sonList[i].son;
                    var _sonList = jq.map(deptList, function(item) {
                        if (item.pId == node.id) {
                            setItemChecked(item);
                            return item;
                        }
                    });
                    node["son"] = _sonList;
                };

                vueObj.deptList = sonList;
                vueObj.showCrumbs = true;
            },
            confirmBtn : function() {
                appcan.window.publish("dept_multi_choose",JSON.stringify(vueObj.deptSelected));
                Supp.UI.closeWindow();
            },
            changeConfirmBtn : function() {
                if (vueObj.deptSelected.length > 0) {
                    vueObj.confirmBtnDisabled = false;
                } else {
                    vueObj.confirmBtnDisabled = true;
                }
            }
        }
    });

}

//设置部门是否选中
function setItemChecked(item) {
    var selectedList = vueObj.deptSelected;
    item["checked"] = false;
    for (var j = 0; j < selectedList.length; j++) {
        var selectedItem = selectedList[j];
        if (selectedItem.id == item.id) {
            item["checked"] = true;
            break;
        }
    };
}

//初始化部门数据
function initPage() {
    var params = {
        "showpost" : 0
    };

    Supp.ajax({
        "type" : "post",
        "url" : "/service/mobile/proxy/r/service/eip/company/getTreeDataOperResult",
        "data" : params,
        "isAuto" : false,
        "success" : function(data) {
            deptList = data.body.rows;
            //筛选pid为null的数据，即根节点数据
            var rootList = [];
            rootList = jq.map(deptList, function(item) {
                if (!item.pId) {
                    item["checked"] = false;
                    return item;
                }
            });
            for (var i = 0; i < rootList.length; i++) {
                var node = rootList[i];
                var sonList = [];
                sonList = jq.map(deptList, function(item) {
                    if (item.pId == node.id) {
                        item["checked"] = false;
                        return item;
                    }
                });
                node["son"] = sonList;
            };
            vueObj.deptList = rootList;
        }
    });

}

function objinArrar(check, param) {
    var isExisted = false;
    var index = -1;
    for (var i = 0; i < param.length; i++) {
        if (param[i].id == check.id) {
            isExisted = true;
            index = i;
            return i;
        }
    }
    if (!isExisted) {
        return -1;
    } else {
        return index;
    }
}

function slideCheckedDiv() {
    var wrapperWidth = $(".footer_checked_div .mui-scroll-wrapper").width();
    var scrollWidth = $(".footer_checked_div .mui-scroll").width();
    if (wrapperWidth < scrollWidth) {
        $(".footer_checked_div .mui-scroll").css("-webkit-transform", "translate3d(" + (wrapperWidth - scrollWidth) + "px, 0px, 0px) translateZ(0px)");
    } else {
        $(".footer_checked_div .mui-scroll").css("-webkit-transform", "translate3d(0px, 0px, 0px) translateZ(0px)");
    }
}
